home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / File.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  2KB  |  130 lines

  1. #include "stdafx.h"
  2.  
  3. #include <stdarg.h>
  4.  
  5. char *construct(const char *fn, ...)
  6. {
  7.     static char s[512];
  8.     va_list arg;
  9.     
  10.     va_start(arg, fn);
  11.     vsprintf(s, fn, arg);
  12.     
  13.     return s;
  14. }
  15.  
  16. int file_size(const char *fn)
  17. {
  18.     TRY
  19.     {
  20.         CFile f(fn, CFile::modeRead | CFile::shareDenyNone);
  21.         
  22.         return f.GetLength();
  23.     }
  24.     CATCH(CFileException, e)
  25.     {
  26.         error("Unable to open %s", fn);
  27.     }
  28.     END_CATCH
  29.  
  30.     return 0;
  31. }
  32.  
  33. char *read_file(const char *fn, int *size)
  34. {
  35.     TRY
  36.     {
  37.         CFile f(fn, CFile::modeRead | CFile::shareDenyNone);
  38.         
  39.         int length = f.GetLength();
  40.         char *data = new char[length];
  41.         
  42.         f.Read(data, length);
  43.         
  44.         if (size != 0) 
  45.             *size = length;
  46.         
  47.         return data;
  48.     }
  49.     CATCH(CFileException, e)
  50.     {
  51.         error("Unable to open %s", fn);
  52.     }
  53.     END_CATCH
  54.  
  55.     return 0;
  56. }
  57.  
  58. char *read_part_file(const char *fn, int start, int length)
  59. {
  60.     TRY
  61.     {
  62.         CFile f(fn, CFile::modeRead | CFile::shareDenyNone);
  63.         
  64.         char *data = new char[length];
  65.         
  66.         f.Seek(start, CFile::begin);
  67.         f.Read(data, length);
  68.         
  69.         return data;
  70.     }
  71.     CATCH(CFileException, e)
  72.     {
  73.         error("Unable to open %s", fn);
  74.     }
  75.     END_CATCH
  76.  
  77.     return 0;
  78. }
  79.  
  80. void write_file(const char *fn, const char *data, int length)
  81. {
  82.     TRY
  83.     {
  84.         CFile f(fn, CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive);
  85.         
  86.         f.Write(data, length);
  87.     }
  88.     CATCH(CFileException, e)
  89.     {
  90.         error("Unable to open %s", fn);
  91.     }
  92.     END_CATCH
  93. }
  94.  
  95. void search_files(const char *dir, const char *mask, void (*callback)(const char *fn, const char *name))
  96. {
  97.     CFileFind dirs, files;
  98.     CString tmp(dir);
  99.     BOOL ok;
  100.  
  101.     // First search subdirectories
  102.  
  103.     ok = dirs.FindFile(tmp + "\\*.*");
  104.  
  105.     while (ok)
  106.     {
  107.         ok = dirs.FindNextFile();
  108.         
  109.         if (dirs.IsDirectory() && !dirs.IsDots())
  110.             search_files((LPCSTR)dirs.GetFilePath(), mask, callback);
  111.     }
  112.  
  113.     // Next find files
  114.  
  115.     ok = files.FindFile(tmp + "\\" + mask);
  116.  
  117.     while (ok)
  118.     {
  119.         ok = files.FindNextFile();
  120.  
  121.         callback((LPCSTR)files.GetFilePath(), (LPCSTR)files.GetFileTitle());
  122.     }
  123. }
  124.  
  125. int file_exists(const char *fn)
  126. {
  127.     CFile f;
  128.  
  129.     return f.Open(fn, CFile::modeRead | CFile::shareDenyNone);
  130. }